package com.hello.system.domain;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.hello.common.core.annotation.Excel;
import com.hello.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 积分充值套餐对象 points_package
 * 
 * @author hello
 * @date 2025-10-29
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class PointsPackage extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 套餐ID（主键） */
    private Long packageId;

    /** 套餐名称（如"基础套餐"、"热门套餐"等） */
    @Excel(name = "套餐名称", readConverterExp = "如=\"基础套餐\"、\"热门套餐\"等")
    private String packageName;

    /** 积分数量 */
    @Excel(name = "积分数量")
    private Long pointsAmount;

    /** 售价（单位：元） */
    @Excel(name = "售价", readConverterExp = "单=位：元")
    private BigDecimal price;

    /** 折扣（0-1之间，如0.8表示8折） */
    @Excel(name = "折扣", readConverterExp = "0=-1之间，如0.8表示8折")
    private BigDecimal discount;

    /** 原价（单位：元） */
    @Excel(name = "原价", readConverterExp = "单=位：元")
    private BigDecimal originalPrice;

    /** 套餐描述说明 */
    @Excel(name = "套餐描述说明")
    private String packageDescription;

    /** 是否热门推荐（0-否，1-是） */
    @Excel(name = "是否热门推荐", readConverterExp = "0=-否，1-是")
    private Integer isPopular;

    /** 是否启用（0-禁用，1-启用） */
    @Excel(name = "是否启用", readConverterExp = "0=-禁用，1-启用")
    private Integer isActive;

    /** 排序顺序（数字越大越靠前） */
    @Excel(name = "排序顺序", readConverterExp = "数=字越大越靠前")
    private Long sortOrder;

    /** 套餐图标URL */
    @Excel(name = "套餐图标URL")
    private String iconUrl;

    /** 额外扩展数据（JSON格式） */
    @Excel(name = "额外扩展数据", readConverterExp = "J=SON格式")
    private String extraData;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createdAt;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updatedAt;

    public void setPackageId(Long packageId) 
    {
        this.packageId = packageId;
    }

    public Long getPackageId() 
    {
        return packageId;
    }
    public void setPackageName(String packageName) 
    {
        this.packageName = packageName;
    }

    public String getPackageName() 
    {
        return packageName;
    }
    public void setPointsAmount(Long pointsAmount) 
    {
        this.pointsAmount = pointsAmount;
    }

    public Long getPointsAmount() 
    {
        return pointsAmount;
    }
    public void setPrice(BigDecimal price) 
    {
        this.price = price;
    }

    public BigDecimal getPrice() 
    {
        return price;
    }
    public void setDiscount(BigDecimal discount) 
    {
        this.discount = discount;
    }

    public BigDecimal getDiscount() 
    {
        return discount;
    }
    public void setOriginalPrice(BigDecimal originalPrice) 
    {
        this.originalPrice = originalPrice;
    }

    public BigDecimal getOriginalPrice() 
    {
        return originalPrice;
    }
    public void setPackageDescription(String packageDescription) 
    {
        this.packageDescription = packageDescription;
    }

    public String getPackageDescription() 
    {
        return packageDescription;
    }
    public void setIsPopular(Integer isPopular) 
    {
        this.isPopular = isPopular;
    }

    public Integer getIsPopular() 
    {
        return isPopular;
    }
    public void setIsActive(Integer isActive) 
    {
        this.isActive = isActive;
    }

    public Integer getIsActive() 
    {
        return isActive;
    }
    public void setSortOrder(Long sortOrder) 
    {
        this.sortOrder = sortOrder;
    }

    public Long getSortOrder() 
    {
        return sortOrder;
    }
    public void setIconUrl(String iconUrl) 
    {
        this.iconUrl = iconUrl;
    }

    public String getIconUrl() 
    {
        return iconUrl;
    }
    public void setExtraData(String extraData) 
    {
        this.extraData = extraData;
    }

    public String getExtraData() 
    {
        return extraData;
    }
    public void setCreatedAt(Date createdAt) 
    {
        this.createdAt = createdAt;
    }

    public Date getCreatedAt() 
    {
        return createdAt;
    }
    public void setUpdatedAt(Date updatedAt) 
    {
        this.updatedAt = updatedAt;
    }

    public Date getUpdatedAt() 
    {
        return updatedAt;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("packageId", getPackageId())
            .append("packageName", getPackageName())
            .append("pointsAmount", getPointsAmount())
            .append("price", getPrice())
            .append("discount", getDiscount())
            .append("originalPrice", getOriginalPrice())
            .append("packageDescription", getPackageDescription())
            .append("isPopular", getIsPopular())
            .append("isActive", getIsActive())
            .append("sortOrder", getSortOrder())
            .append("iconUrl", getIconUrl())
            .append("extraData", getExtraData())
            .append("createdAt", getCreatedAt())
            .append("updatedAt", getUpdatedAt())
            .toString();
    }
}
